/**
 * Created by ztt on 2024/06/02.
 */
import {DataTypeUtils} from 'great-jsutils';

export class HttpReponseDataType {

    public id: string;

    /**
     * 操作成功、失败的消息
     */
    public message = '操作失败！';

    /**
     * 是否执行成功
     */
    public success = false;

    /**
     * 响应代码
     */
    public code = '99999';

    /**
     * 业务数据
     */
    public data: any;

    /**
     * 业务数据
     */
    public result: any;

    /**
     * 扩展字段
     */
    [key: string]: any;

    static init(obj: any): HttpReponseDataType {
        const model = new HttpReponseDataType();
        if (typeof obj === 'string') {
            model.data = obj;
        } else if (obj instanceof HttpReponseDataType) {
            return obj;
        } else if (typeof obj === 'object') {
            Object.keys(obj).forEach(key => {
                if (key in model) {
                    model[key] = obj[key];
                }
            });
        }
        return model;
    }

    /**
     * 后台接口返回成功
     * @param result：后台服务返回的数据
     */
    static isSuccess(result: HttpReponseDataType): boolean {
        return result && result.success;
    }

    /**
     * 后台接口返回成功，结果且非空
     * @param result：后台服务返回的数据
     */
    static isNotNullResult(result: HttpReponseDataType): boolean {
        return this.isSuccess(result) && result.data;
    }

    /**
     * 后台接口返回成功，结果为非空数组
     * @param result：后台服务返回的数据
     */
    static isNotEmptyArray(result: HttpReponseDataType): boolean {
        return this.isNotNullResult(result) && DataTypeUtils.isArray(result.data) && result.data.length > 0;
    }

    /**
     * 后台接口返回成功，结果为非空分页数据
     * @param result：后台服务返回的数据
     */
    static isNotNullPageInfo(result: HttpReponseDataType): boolean {
        return this.isNotNullResult(result) && DataTypeUtils.isArray(result.data.list) && result.data.list.length > 0;
    }

    /**
     * 创建失败时的对象
     * @param message：失败提醒信息
     */
    static error(message: string): HttpReponseDataType {
        const model = new HttpReponseDataType();
        model.success = false;
        model.message = message;
        return model;
    }

    /**
     * 创建成功时的对象
     * @param data：参数、数据
     */
    static success(data: any): HttpReponseDataType {
        const model = new HttpReponseDataType();
        model.success = true;
        model.data = data;
        return model;
    }

    /**
     * 判断是否成功
     */
    isSuccess() {
        return this.success;
    }

    /**
     * 获取提醒消息
     */
    getMessage() {
        if (this.resultMsg) {
            return this.resultMsg;
        } else {
            const message = this.defaultMessage(this.resultCode);
            if (message) {
                return message;
            } else {
                return '未知的操作结果！';
            }
        }
    }
    defaultMessage(code) {
        switch (code) {
            case '-1': return '操作出现错误！';
            case 0: return '操作失败！';
            case 1: return '操作成功！';
            case 2: return '操作成功，即将进行一下步操作！';
            default: return  '操作出现错误！';
        }
    }

}
